package com.winsdom.service.customer;

import com.winsdom.entity.customer.CustomerEnterpriseCreateRequest;

/**
 * 企业客户创建服务接口，定义企业客户创建的业务逻辑契约。
 * <p>
 * 该接口负责处理企业客户的完整创建流程，包括客户主表、企业扩展表、地址信息、
 * 联系人信息及相关配置的数据库操作，并通过事务管理确保数据一致性。
 */
public interface CustomerEnterpriseCreateService {

    /**
     * 创建企业客户的完整业务方法（支持多表关联插入）。
     * <p>
     * 业务流程：
     * 1. 校验并设置默认业务参数（如客户状态、操作人ID等）。
     * 2. 插入客户主表记录并获取自增ID。
     * 3. 插入企业客户扩展信息（如企业性质、注册资本等）。
     * 4. 批量插入地址信息（支持注册地址、办公地址等多类型）。
     * 5. 插入联系人信息及联系人-楼盘分类关联关系（支持多联系人、去重楼盘）。
     * 6. 插入营业执照图片路径及系统配置信息（通知配置、账单配置）。
     * <p>
     * 事务控制：该方法在实现类中通过@Transactional注解保证原子性，
     * 若中途出现异常将自动回滚，确保数据完整性。
     * <p>
     * 数据规范：
     * - 传入的{@link CustomerEnterpriseCreateRequest}对象需包含updateUserId（操作人ID），
     *   否则抛出IllegalArgumentException。
     * - 客户类型自动设置为企业类型（数据库约定类型码）。
     *
     * @param createInfo 企业客户创建信息实体，包含完整的客户创建数据（非null）
     * @return 新创建的客户ID（数据库自增主键）
     * @throws IllegalArgumentException 当createInfo为null或updateUserId缺失时抛出
     * @see com.winsdom.service.customer.impl.CustomerEnterpriseCreateServiceImpl
     */
    Long createEnterprise(CustomerEnterpriseCreateRequest createInfo);
}